
#Область ПрограммныйИнтерфейс

// Использование платформенного буфера обмена доступно.
// 
// Возвращаемое значение:
// Булево 
Функция ИспользованиеПлатформенногоБуфераОбменаДоступно() Экспорт
	Возврат СредстваБуфераОбмена.ИспользованиеДоступно();
КонецФункции

// Начинает очистку содержимого буфера обмена
// 
// Параметры:
// 	ОписаниеОповещения - ОписаниеОповещения - Содержит описание процедуры, которая будет вызвана после завершения со следующими параметрами:
//	<РезультатОчистки> – Результат очистки, Тип: Булево. Неопределено- если не удалось подключить компоненту
//	<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.
Асинх Процедура НачатьОчисткуБуфераОбмена(ОписаниеОповещения) Экспорт
	МассивДанных = Новый Массив;
	МассивДанных.Добавить(Новый ЭлементБуфераОбмена(СтандартныйФорматДанныхБуфераОбмена.Текст,""));
	
	Результат = Ждать СредстваБуфераОбмена.ПоместитьДанныеАсинх(МассивДанных);
	
	ВыполнитьОбработкуОповещения(ОписаниеОповещения, Результат);
КонецПроцедуры

// Начинает помещение картинку в буфер обмена
// 
// Параметры:
// 	Картинка - Картинка-
// 	ОписаниеОповещения - ОписаниеОповещения - Содержит описание процедуры, которая будет вызвана после завершения со следующими параметрами:
//	<Результат> – Результат установки картинки в буфере обмена, Тип: Булево. Неопределено- если не удалось подключить компоненту
//	<ПараметрыВызова> - Массив параметров вызова метода компоненты
//	<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.
Асинх Процедура НачатьКопированиеКартинкиВБуфер(Картинка, ОписаниеОповещения) Экспорт
	ПоддерживаетсяФормат = Ждать СредстваБуфераОбмена.ПоддерживаетсяФорматДанных(СтандартныйФорматДанныхБуфераОбмена.Картинка);
	Если Не ПоддерживаетсяФормат Тогда
		ВыполнитьОбработкуОповещения(ОписаниеОповещения, Ложь);
	КонецЕсли;
	Результат = Ждать СредстваБуфераОбмена.ПоместитьДанныеАсинх(Новый ЭлементБуфераОбмена(СтандартныйФорматДанныхБуфераОбмена.Картинка,Картинка));

	ВыполнитьОбработкуОповещения(ОписаниеОповещения, Результат);
КонецПроцедуры

// Начинает получение картинки из буфера обмена
// 
// Параметры:
// 	ОписаниеОповещения - ОписаниеОповещения - Содержит описание процедуры, которая будет вызвана после завершения со следующими параметрами:
//	<ДанныеКартинки> – Данные картинки в запрошенном формате, Тип: Строка, ДвоичныеДанные, Картинка. Неопределено- если не удалось подключить компоненту или в буфере нет картинки
//	<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.
// 	ВариантПолучения - Строка
// 	Один из варинатов:
// 		ДвоичныеДанные- получение двоичных данных картинки
// 		Картинка- Преобразованное к типу "Картинка" содержание буфера
// 		Адрес- Адрес двоичных данных картинки во временном хранилище
Асинх Процедура НачатьПолучениеКартинкиИзБуфера(ОписаниеОповещения, ВариантПолучения = "Картинка") Экспорт
	СодержитДанные = Ждать СредстваБуфераОбмена.СодержитДанныеАсинх(СтандартныйФорматДанныхБуфераОбмена.Картинка);
	Если Не СодержитДанные Тогда
		ВыполнитьОбработкуОповещения(ОписаниеОповещения, Неопределено);
		Возврат;
	КонецЕсли;
	Результат = Ждать СредстваБуфераОбмена.ПолучитьДанныеАсинх(СтандартныйФорматДанныхБуфераОбмена.Картинка);
	ВыполнитьОбработкуОповещения(ОписаниеОповещения, КартинкаВНужномФорматеИзБуфера(Результат,
		ВариантПолучения));
КонецПроцедуры

// Начинает помещение текста в буфер обмена
// 
// Параметры:
// 	СтрокаКопирования- Строка- Строка, которую необходимо поместить в буфер обмена
// 	ОписаниеОповещения - ОписаниеОповещения - Содержит описание процедуры, которая будет вызвана после завершения со следующими параметрами:
//	<Результат> – Результат установки текста в буфере обмена, Тип: Булево. Неопределено- если не удалось подключить компоненту
//	<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.
Асинх Процедура НачатьКопированиеСтрокиВБуфер(СтрокаКопирования, ОписаниеОповещения) Экспорт
	ПоддерживаетсяФормат = Ждать СредстваБуфераОбмена.ПоддерживаетсяФорматДанных(СтандартныйФорматДанныхБуфераОбмена.Текст);
	Если Не ПоддерживаетсяФормат Тогда
		ВыполнитьОбработкуОповещения(ОписаниеОповещения, Ложь);
		Возврат;
	КонецЕсли;
	Результат = Ждать СредстваБуфераОбмена.ПоместитьДанныеАсинх(Новый ЭлементБуфераОбмена(СтандартныйФорматДанныхБуфераОбмена.Текст,СтрокаКопирования));

	ВыполнитьОбработкуОповещения(ОписаниеОповещения, Результат);
КонецПроцедуры


// Начинает получение текста из буфера обмена
// 
// Параметры:
// 	ОписаниеОповещения - ОписаниеОповещения - Содержит описание процедуры, которая будет вызвана после завершения со следующими параметрами:
//	<Результат> – Текст из буфера обмена, Тип: Строка. Неопределено- если не удалось подключить компоненту
//	<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.
Асинх Процедура НачатьПолучениеСтрокиИзБуфера(ОписаниеОповещения) Экспорт
	СодержитДанные = Ждать СредстваБуфераОбмена.СодержитДанныеАсинх(СтандартныйФорматДанныхБуфераОбмена.Текст);
	Если Не СодержитДанные Тогда
		ВыполнитьОбработкуОповещения(ОписаниеОповещения, "");
		Возврат;
	КонецЕсли;
	Результат = Ждать СредстваБуфераОбмена.ПолучитьДанныеАсинх(СтандартныйФорматДанныхБуфераОбмена.Текст);
	ВыполнитьОбработкуОповещения(ОписаниеОповещения, Результат);
КонецПроцедуры


// Начинает получение формата текущего значения в буфере обмена
// 
// Параметры:
// 	ОписаниеОповещения - ОписаниеОповещения - Содержит описание процедуры, которая будет вызвана после завершения со следующими параметрами:
//	<Результат> – Строка в формате JSON, содержащая описание формата содержимого буфера обмена, Тип: Строка. Неопределено- если не удалось подключить компоненту
//	<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.
Асинх Процедура НачатьПолучениеФорматаБуфераОбмена(ОписаниеОповещения) Экспорт

	СодержитДанные = Ждать СредстваБуфераОбмена.СодержитДанныеАсинх(СтандартныйФорматДанныхБуфераОбмена.Картинка);
	Если СодержитДанные Тогда
		ВыполнитьОбработкуОповещения(ОписаниеОповещения, "Картинка");
		Возврат;
	КонецЕсли;	
	СодержитДанные = Ждать СредстваБуфераОбмена.СодержитДанныеАсинх(СтандартныйФорматДанныхБуфераОбмена.HTML);
	Если СодержитДанные Тогда
		ВыполнитьОбработкуОповещения(ОписаниеОповещения, "HTML");
		Возврат;
	КонецЕсли;	
	СодержитДанные = Ждать СредстваБуфераОбмена.СодержитДанныеАсинх(СтандартныйФорматДанныхБуфераОбмена.Текст);
	Если СодержитДанные Тогда
		ВыполнитьОбработкуОповещения(ОписаниеОповещения, "Текст");
		Возврат;
	КонецЕсли;	
	ВыполнитьОбработкуОповещения(ОписаниеОповещения, "");
	
КонецПроцедуры


#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс


#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция КартинкаВНужномФорматеИзБуфера(ДанныеБуфера, ВариантПолучения) 
	Если ТипЗнч(ДанныеБуфера) <> Тип("Картинка") Тогда
		Возврат Неопределено;
	КонецЕсли;

	Если НРег(ВариантПолучения) = "двоичныеданные" Тогда
		Возврат ДанныеБуфера.ПолучитьДвоичныеДанные();
	ИначеЕсли НРег(ВариантПолучения) = "адрес" Тогда
		Возврат ПоместитьВоВременноеХранилище(ДанныеБуфера.ПолучитьДвоичныеДанные());
	Иначе
		Возврат ДанныеБуфера;
	КонецЕсли;
КонецФункции

#КонецОбласти
